package com.kitom.qqmap.bean.search;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.Builder;
import lombok.Data;

import java.io.Serializable;

/**
 * <pre>
 *  高德天气信息请求对象
 * </pre>
 * @author <a href="https://gitee.com/kitom">ki_tom</a>
 * @since 2021-01-12
 */
@Data
@Builder
public class QQmapSearchRequest implements Serializable {

    private static final long serialVersionUID = 6898855774969997295L;

    /**
     * 城市编码
     * <pre>
     * 是否必填： 是
     * 搜索关键字，长度最大96个字节，注：keyword仅支持检索一个。
     * （API采用UTF-8字符编码，1个英文字符占用1个字节，
     * 1个中文字符占3个字节，具体请参阅相关技术资料）
     * keyword=酒店，注意键值要进行URL编码（推荐encodeURI），如
     * keyword=%e9%85%92%e5%ba%97
     * </pre>
     */
    private String keyword;

    /**
     * 边界
     * <pre>
     *是否必填： 否
     *格式：
     *1)周边搜索
     *  boundary=nearby(lat,lng,radius[, auto_extend])
     * 子参数：
     * lat,lng：搜索中心点的经纬度，格式顺序为纬度在前，经度在后
     * radius：搜索半径，单位：米，取值范围：10到1000
     * auto_extend：[可选] 当前范围无结果时，是否自动扩大范围，取值：
     * 0 不扩大
     * 1 [默认] 自动扩大范围（依次按照按1公里、2公里、5公里，
     * 最大到全城市范围搜索）
     *
     *2)城市/区域搜索
     * 格式：
     * boundary=region(city_name [,auto_extend][,lat,lng])
     * 子参数：
     * city_name：检索城市名称， 如北京市，同时支持adcode（行政区划代码，可精确到区县级），如130681
     * auto_extend：[可选]当前范围无结果时，是否自动扩大范围，取值
     * 0 仅在当前城市搜索；
     * 1 [默认] 若当前城市搜索无结果，则自动扩大范围；
     * 2 限制在当前区/县范围搜索，无结果时不自动扩大范围（仅在传入city_name为区级或区级行政区划代码时有效）。
     * lat,lng：[可选] 当keyword使用酒店、超市等泛分类关键词时，这类场景大多倾向于搜索附近，传入此经纬度，搜索结果会优先就近地点，体验更优。格式顺序为纬度在前，经度在后
     *
     * 3)矩形范围(屏幕视野内)搜索
     * 格式：
     * boundary=rectangle(lat,lng,lat,lng)
     * 子参数：
     * 由矩形左下角（西南）和右上角（东北）两对经纬度组成，格式顺序为纬度在前，经度在后
     *
     * </pre>
     *
     */
    private String boundary;

    /**
     * 筛选条件
     * <pre>
     * 1. 指定分类筛选，语句格式为：
     * category=分类名1,分类名2
     * 最多支持5个分类词（支持的分类请参考：<a href="https://lbs.qq.com/service/webService/webServiceGuide/webServiceAppendix">POI分类表</a>）
     * 2. 排除指定分类，语句格式为：
     * category<>分类名1,分类名2
     * 最多支持5个分类词（支持的分类请参考：<a href="https://lbs.qq.com/service/webService/webServiceGuide/webServiceAppendix">POI分类表</a>）
     * 3. 筛选有电话的地点：tel<>null
     * </pre>
     */
    private String filter;
    /**
     * <pre>
     * 排序，支持按距离由近到远排序，取值：_distance
     * 说明：
     * 1. 周边搜索默认排序会综合考虑距离、权重等多方面因素
     * 2. 设置按距离排序后则仅考虑距离远近，一些低权重的地点可能因距离近排在前面，导致体验下降
     * </pre>
     */
    private String orderby;
    /**
     * 每页条目数
     * <pre>
     *  是否必填： 否
     *  最大限制为20条，默认为10条
     * </pre>
     */
    private String page_size;
    /**
     * 第x页
     * <pre>
     *  是否必填： 否
     *  默认第1页
     * </pre>
     */
    private String page_index;


    public JSONObject toJson(){
        String beanString = JSON.toJSONString(this);
        return JSONObject.parseObject(beanString);
    }
}
